
local gAnimationCfg={
     radius = 25,    -- 散开的半径
     height = 30,    -- 初始弹跳的高度
     time = 0.5,   -- 弹跳时间
}

-- 函数：创建物品的克隆并设置初始位置和速度:acfg==gAnimationCfg
local function createDrop(clone,explosionCenter,acfg)
--  _G.CommonOHOH:PrintTable(acfg)

	-- 设置物品初始位置为爆炸中心
	clone.Position = explosionCenter
	-- 添加物理特性
	clone.Anchored = false

	-- 添加初始速度，使物品从中心点向外散开
	local bodyVelocity = Instance.new("BodyVelocity")
	local direction = Vector3.new(
		math.random(-acfg.radius, acfg.radius),
		math.random(acfg.height/3, acfg.height),
		math.random(-acfg.radius, acfg.radius)
	).unit * acfg.radius
	bodyVelocity.Velocity = direction
	bodyVelocity.P = 10000
	bodyVelocity.MaxForce = Vector3.new(8000, 8000, 8000)
	bodyVelocity.Parent = clone

	-- 添加禁止旋转效果
	local bodyGyro = Instance.new("BodyGyro")
	bodyGyro.CFrame = clone.CFrame
	bodyGyro.MaxTorque = Vector3.new(8000, 8000, 8000)
	bodyGyro.P = 10000
	bodyGyro.Parent = clone
	-- 在短时间后移除BodyVelocity和BodyGyro，使物品自然弹跳和停止
	game:GetService("Debris"):AddItem(bodyVelocity, acfg.time)
	game:GetService("Debris"):AddItem(bodyGyro, acfg.time)
end


-- 函数：检测物品是否停止
local function CheckDrop(list,pushFuc)
  
    while true do
        wait(0.2)  -- 每0.1秒检测一次
        local isnotHad=true
        for part, state in pairs(list) do
            isnotHad=false
            if part.Velocity.magnitude < 0.1 then --已经停止
                list[part]=nil
                pushFuc(part)
            end
        end

        if isnotHad then
            break
        end

    end
end

local M={}
M.Play = function(PullFuc,PushFuc,count,explosionCenter,acfg)
    local an=acfg
    if not an then
        an=gAnimationCfg
    end
    local partList={}
    for i=1,count do
        local p=PullFuc()
        partList[p]=true
        createDrop(p,explosionCenter,an)
    end
    spawn(function() CheckDrop(partList,PushFuc) end)
end;




return M